﻿var langs = new Languages();
var inLangList, outLangList;
var translator = new Translator();

/*Создание popup-ов со списками языков*/
function createLangLists()
{
	var langListGen = new LangListGenerator();
	langListGen.generate("inLangList", "in", function(e)
		{
			var event = (e ? e : window.event);
			var target = (event.srcElement ? event.srcElement : event.target);
			
			if (target.className != "langItem")
			{
				/* Щёлкнули внутри списка, но не по языку. Делаем вид, что ничего не произошло. */
				return;
			}
			
			langButtons.setInFlag(target.innerHTML);
			translator.setInLang(target.innerHTML);
		});
	langListGen.generate("outLangList", "out", function(e)
		{
			var event = (e ? e : window.event);
			var target = (event.srcElement ? event.srcElement : event.target);
			
			if (target.className != "langItem")
			{
				/* Щёлкнули внутри списка, но не по языку. Делаем вид, что ничего не произошло. */
				return;
			}
			
			langButtons.setOutFlag(target.innerHTML);
			translator.setOutLang(target.innerHTML);
		});

	inLangList = new Popup("inLangList");
	outLangList = new Popup("outLangList");
}

/*Обрабока событий onmouseover/onmouseout*/
function bindOnMouseHover()
{

	$("aboutButton").onmouseover = function()
	{
		$("aboutButton").style.background = "url(imgs/buttons/about_button_hover.png)";
		$("aboutButton").style.backgroundRepeat = "no-repeat";
	}
	
	$("aboutButton").onmouseout = function()
	{
		$("aboutButton").style.background = "url(imgs/buttons/about_button.png)";
		$("aboutButton").style.backgroundRepeat = "no-repeat";
	}

	/*Мышь над clear_button*/
	$("clearButton").onmouseover = function()
	{
		$("clearButton").style.background = "url(imgs/buttons/clr_button_hover.png)";
		$("clearButton").style.backgroundRepeat = "no-repeat";
	}
	
	/*Мышь ушла с clear_button*/
	$("clearButton").onmouseout = function()
	{
		$("clearButton").style.background = "url(imgs/buttons/clr_button.png)";
		$("clearButton").style.backgroundRepeat = "no-repeat";
	}
	
	/*Мышь над translate_button*/
	$("translateButton").onmouseover = function()
	{
		$("translateButton").style.background = "url(imgs/buttons/translate_button_hover.png)";
		$("translateButton").style.backgroundRepeat = "no-repeat";
	}
	
	/*Мышь ушла с translate_button*/
	$("translateButton").onmouseout = function()
	{
		$("translateButton").style.background = "url(imgs/buttons/translate_button.png)";
		$("translateButton").style.backgroundRepeat = "no-repeat";
	}
}

/*Обработка щелчков мыши и нажатия enter*/
function bindOnClick()
{
	/*Скрытие спиское по щелчку мыши*/
	document.body.onmouseup = function(e)
	{
		var event = (e ? e : window.event);
		var target = (event.target ? event.target : event.srcElement);
		if (target.className != "langItem")
		{
			inLangList.hide();
			outLangList.hide();
		}
	};
	
	/*Перевод по нажатию Enter*/
	document.body.onkeyup = function(e)
	{
		var event = (e ? e : window.event);
		if (event.keyCode == 13)
			translator.translate("input", "output");
	};
	
	/*Отображение списков языков по щелчку на флаге*/
	$("langIn").onclick = function(e)
	{
		var event = (e ? e : window.event);
		inLangList.show(event);
	}
	$("langOut").onclick = function(e)
	{
		var event = (e ? e : window.event);
		outLangList.show(event);
	}
	
	/*Перевод по нажатию на кнопку translate*/
	$("translateButton").onclick = function()
	{
		translator.translate("input", "output")
	}
	
	/*Переворот направления перевода*/
	$("langSwitcher").onclick = function()
	{
		translator.switchLangs();
		langButtons.switchFlags();
	}
	
	/*Очистка гаджета по клику на clear_button*/
	$("clearButton").onclick = function()
	{
		$("input").value = "";
		outputPost("");
	}
	
	$("aboutButton").onclick = function()
	{
		$("aboutContainer").style.visibility = "visible";
	}
	
	$("closeAbout").onclick = function()
	{
		$("aboutContainer").style.visibility = "hidden";
	}
	
	/*Автоматическое изменение размеров input при вводе (реально чё-то делает только для FF)*/
	makeAutoResize("input", symbolsInARow, rowHeight, minHeight);
	
	/*Прокручивание колёсиком мышки*/
	makeScroll("input", startPosition, rowHeight);
}

/*Загрузка параметров*/
function readSettings()
{
	if (typeof(System) == "undefined")
	{
		return;
	}
	
	var tmp = System.Gadget.Settings.readString("inLang");
	if (!tmp)
	{
		tmp = "English";
	}
	translator.setInLang(tmp);
	langButtons.setInFlag(tmp);
	
	tmp = System.Gadget.Settings.readString("outLang");
	if (!tmp)
	{
		tmp = "Russian";
	}
	translator.setOutLang(tmp);
	langButtons.setOutFlag(tmp);
}

window.onload = function()
{
	if (checkLangAPIFileLoaded())
	{
		google.language.getBranding("branding");
	}
	
	langButtons = new LangButtons("langIn", "langOut", "imgs/flags/", ".png");
	
	createLangLists();
	bindOnMouseHover();
	bindOnClick();
	
	readSettings();
}

window.onunload = function()
{
	if (typeof(System) == "undefined")
	{
		return;
	}
	
	/*Сохранение параметров*/
	System.Gadget.Settings.writeString("inLang", translator.inLang);
	System.Gadget.Settings.writeString("outLang", translator.outLang);
}